#include <bits/stdc++.h>
#define len(s) (int)s.size()
using namespace std;
using ll = int64_t;
using ld = long double;
using pll = pair<ll, ll>;
using pii = pair<int, int>;
const ll INF = 1e18;
const int MAXN = 1e5 + 11;
int n, q, a[MAXN], b[MAXN];
unordered_map<int, int> ids;
vector<int> st[MAXN * 4];
void build(int id, int l, int r)
{
if (l == r)
{
st[id].push_back(b[l]);
}
else
{
int mid = (l + r) >> 1;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
merge(st[id * 2].begin(), st[id * 2].end(),
st[id * 2 + 1].begin(), st[id * 2 + 1].end(),
back_inserter(st[id]));
}
}
int query(int id, int l, int r, int u, int v, int k)
{
if (v < l || r < u)
return 0;
if (u <= l && r <= v)
{
return (st[id].size() - (upper_bound(st[id].begin(), st[id].end(), k) - st[id].begin()));
}
int mid = (l + r) >> 1;
return query(id * 2, l, mid, u, v, k) + query(id * 2 + 1, mid + 1, r, u, v, k);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
cin >> n >> q;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
}
for (int i = n; i >= 1; --i)
{
if (ids.count(a[i]) == 0)
b[i] = 1e9;
else
b[i] = ids[a[i]];
ids[a[i]] = i;
}
build(1, 1, n);
while (q--)
{
int l, r;
cin >> l >> r;
cout << query(1, 1, n, l, r, r) << "\n";
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxlbihzKSAoaW50KXMuc2l6ZSgpCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBsbCA9IGludDY0X3Q7CnVzaW5nIGxkID0gbG9uZyBkb3VibGU7CnVzaW5nIHBsbCA9IHBhaXI8bGwsIGxsPjsKdXNpbmcgcGlpID0gcGFpcjxpbnQsIGludD47Cgpjb25zdCBsbCBJTkYgPSAxZTE4OwoKY29uc3QgaW50IE1BWE4gPSAxZTUgKyAxMTsKaW50IG4sIHEsIGFbTUFYTl0sIGJbTUFYTl07CnVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IGlkczsKdmVjdG9yPGludD4gc3RbTUFYTiAqIDRdOwoKdm9pZCBidWlsZChpbnQgaWQsIGludCBsLCBpbnQgcikKewogICAgaWYgKGwgPT0gcikKICAgIHsKICAgICAgICBzdFtpZF0ucHVzaF9iYWNrKGJbbF0pOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgYnVpbGQoaWQgKiAyLCBsLCBtaWQpOwogICAgICAgIGJ1aWxkKGlkICogMiArIDEsIG1pZCArIDEsIHIpOwoKICAgICAgICBtZXJnZShzdFtpZCAqIDJdLmJlZ2luKCksIHN0W2lkICogMl0uZW5kKCksCiAgICAgICAgICAgICAgc3RbaWQgKiAyICsgMV0uYmVnaW4oKSwgc3RbaWQgKiAyICsgMV0uZW5kKCksCiAgICAgICAgICAgICAgYmFja19pbnNlcnRlcihzdFtpZF0pKTsKICAgIH0KfQoKaW50IHF1ZXJ5KGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYsIGludCBrKQp7CiAgICBpZiAodiA8IGwgfHwgciA8IHUpCiAgICAgICAgcmV0dXJuIDA7CiAgICBpZiAodSA8PSBsICYmIHIgPD0gdikKICAgIHsKICAgICAgICByZXR1cm4gKHN0W2lkXS5zaXplKCkgLSAodXBwZXJfYm91bmQoc3RbaWRdLmJlZ2luKCksIHN0W2lkXS5lbmQoKSwgaykgLSBzdFtpZF0uYmVnaW4oKSkpOwogICAgfQoKICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICByZXR1cm4gcXVlcnkoaWQgKiAyLCBsLCBtaWQsIHUsIHYsIGspICsgcXVlcnkoaWQgKiAyICsgMSwgbWlkICsgMSwgciwgdSwgdiwgayk7Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgY291dC50aWUoTlVMTCk7CiAgICAvLyBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgIC8vIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiAgICBjaW4gPj4gbiA+PiBxOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkKICAgIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gbjsgaSA+PSAxOyAtLWkpCiAgICB7CiAgICAgICAgaWYgKGlkcy5jb3VudChhW2ldKSA9PSAwKQogICAgICAgICAgICBiW2ldID0gMWU5OwogICAgICAgIGVsc2UKICAgICAgICAgICAgYltpXSA9IGlkc1thW2ldXTsKICAgICAgICBpZHNbYVtpXV0gPSBpOwogICAgfQoKICAgIGJ1aWxkKDEsIDEsIG4pOwoKICAgIHdoaWxlIChxLS0pCiAgICB7CiAgICAgICAgaW50IGwsIHI7CiAgICAgICAgY2luID4+IGwgPj4gcjsKICAgICAgICBjb3V0IDw8IHF1ZXJ5KDEsIDEsIG4sIGwsIHIsIHIpIDw8ICJcbiI7CiAgICB9Cn0=